package com.example.demo.huawei;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 吃蟠桃
 */
public class Main49 {

    //设定二分查找的左边界
    //left
    //left 为 1，右边界
    //right
    //right 为所有桃树上最大蟠桃数量。
    //在每次二分查找中间值
    //mid
    //mid。
    //检查是否能在
    //𝐻
    //H 小时内以速度
    //mid
    //mid 吃完所有桃子。
    //如果可以，尝试更小的速度，即
    //right
    //=
    //mid
    //−
    //1
    //right=mid−1。
    //如果不可以，尝试更大的速度，即
    //left
    //=
    //mid
    //+
    //1
    //left=mid+1。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        String[] split1 = line.split("\\s");
        // split1转为int数组
        int[] peaches = new int[split1.length];
        for (int i = 0; i < split1.length; i++) {
            peaches[i] = Integer.parseInt(split1[i]);
        }
        // 守卫离开时间
        int h = sc.nextInt();
        //        System.out.println(h);
        //        System.out.println(Arrays.toString(peaches));
        // 桃树上最多的桃子
        int max = Arrays.stream(peaches).max().getAsInt();

        // 二分查找
        int left = 1;
        int right = max;

        //        int min = Integer.MAX_VALUE;
        while (left <= right) {
            int mid = (left + right) >>> 1;
            if (canEatAll(peaches, h, mid)) {
                //                min = Math.min(min, mid);
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        System.out.println(left <= max ? left : 0);
    }

    private static boolean canEatAll(int[] piles, int H, int K) {
        int time = 0;
        for (int pile : piles) {
            //            time += (pile + K - 1) / K;  // 向上取整
            time += (int) Math.ceil(pile * 1.0 / K);
        }
        return time <= H;
    }
}
